package com.gjintel.business.proj.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.gjintel.business.proj.model.ProjectInfo;
import com.gjintel.business.proj.service.INewNotifyService;
import com.gjintel.framework.log.model.TSysWarningLog;
import com.gjintel.framework.log.service.impl.MessageServiceImpl;
import com.gjintel.framework.user.model.User;
import com.gjintel.framework.util.CommUtil;

@Service("newNotifyService")
public class NewNotifyServiceImpl implements INewNotifyService {

	@Autowired
	private MessageServiceImpl messageService;
	
	@Override
	public void putNotify(int notifyType, List<User> users, ProjectInfo project) {

		//根据notifyType,生成发布内容,返回格式：title@content
		String notifyContent = this.genContent(notifyType,project);
		
		//生成消息
		TSysWarningLog warningLog=new TSysWarningLog();
		warningLog.setTitle(notifyContent.split("@")[0]);       //标题
		warningLog.setContents(notifyContent.split("@")[1]);
		warningLog.setProjectId(project.getId());
		warningLog.setWarnType(notifyType+"");
		warningLog.setWarringId("");
		
		for(User u:users){
			if(u!=null){
				warningLog.setReaderId(u.getId());
				warningLog.setReaderName(u.getName());
				messageService.saveOrUpdate(warningLog);
			}
		}
		
	}

	private String genContent(int notifyType,ProjectInfo project) {
		String temp= this.getNofiryModelByType(notifyType);
		Map m =new HashMap();
		m.put("dto", project);
		String re=CommUtil.freemarkerProcess(m, temp);
		return re;
	}
	
	public static int AUDIT_PRO=1//审核结果 
			,COMPILE=2//编制
			,ESTABLISH=3//编制结果
			,COMPILEOVERTIME=333//超时未审核
			,OPEN_BID=4//开标
			,SUSPEND=5//暂停
			,CANCEL=6//撤销
			,RESTART=7//重启
			,BID_WAY=8//采购方确认中标方式
			,CENTER_CONFIRM=9//中心确认
			,BID_SHOW=10//中标公示
			,BID_PAUSE=11//中标公示中暂停
			,FILURE_BID=12//流标
			,BID_SHOW_END=13//中标公示结束
	        ,BID_ADVICE_NOTE=14//中标通知书
	        ,UPLOAD_CONTRACT=15//上传合同
	        ,CONTRACT_SHOW=16//合同公示
	        ,CONTRACT_AUDIT=17//合同审核
	        ,CONTRACT_AUDIT_UNPASS=18//合同审核不通过
	        ,CONTRACT_DEBLOCKING=19 //合同解锁
	        ,UPLOAD_REPORT=20//上传验收报告
	        ,REPORT_AUDIT=21//验收审核
	        ,UPDATE_REPORT=22//调整验收报告
			,SYSTEM_ASSIGN=24//待分配
	        ,PROJECT_END=23;//确认结项
	
	private String getNofiryModelByType(int notifyType) {

		String ret="";
		
		switch (notifyType) {
		case 1:   //审核结果
			ret="项目审核@您有个待审核项目：${dto.name},请及时审核。";
			break;
		case 2:
			ret="项目编制@您有个待编制项目：${dto.name},请及时编制。";
			break;
		case 3:   //编制结果
			ret="项目编制@您的${dto.name}项目编制确认不通过，请及时处理。";
			break;
		case 333:   //超时未审核
			ret="项目编制@您的${dto.name}项目超时未审核，请及时处理。";
			break;
		case 4:   //开标
			ret="开标@您的${dto.name}项目竞价公告已发布。";
			break;
		case 5:   //SUSPEND=5//暂停
			ret="项目暂停@您有个暂停待审核项目：${dto.name},请及时审核。";
			break;
		case 6:   //撤销
			ret="项目撤销@您有个撤销项目：${dto.name}。";
			break;
		case 7://重启
			ret="项目重启@您有个重启项目：${dto.name}。";
			break;
		case 8://采购方确定中标方式
			ret="采购方确定中标方式@您有个项目:${dto.name},等待确定中标方式	";
		   break;
		case 9://中心确认 
			ret="中心确认@您有个项目：${dto.name}，等待确认结果。";
		   break;
		case 10: //中标公示
			ret="中标公示@您有个中标公示项目：${dto.name}。";
		   break;
		case 11://中标公示中暂停
			ret="中标公示暂停审核@您有个项目：${dto.name},申请了暂停,等待审核";
		   break;	
		case 12: //流标
			ret="流标@您有个流标项目：${dto.name}。";
		   break;	
		case 13: //中标公示结束
			ret="中标公示结束@您有个中标公示结束项目：${dto.name}。";
			break;
		case 14:   //发放中标通知书
			ret="发放中标通知书@您有个中标公示结束项目：${dto.name}，等待发放中标通知书。";
			break;
		case 15://上传合同
			ret="上传合同@您有个项目：${dto.name}，等待上传合同。";
			break;
		case 16:   //合同公示
			ret="合同公示@您有个合同公示项目：${dto.name}。";
			break;
		case 17://合同审核
			ret="合同审核@您有项目：${dto.name},合同需要审核。";
			break;
		case 18://合同审核不通过
		    ret="合同审核不通过@您有个项目：${dto.name}，合同审核不通过。";
		    break;
		case 19://合同解锁
			ret="合同解锁@您有个项目：${dto.name}，60天合同为上传，合同超被锁定，需要解锁合同。";
			break;
		case 20:	
			//上传验收报告
			ret="上传验收报告@您有个合同公示结束项目：${dto.name}，等待上传验收报告。";
			break;
		case 21://验收审核	
			ret="验收审核@您有个项目：${dto.name}，需要审核验收报告。";
			break;
		case 22://调整验收报告
			ret="重新上传验收报告@您有个项目：${dto.name}，验收报告审核不通过，需要重新上传合同。";
			break;
		case 23://确认结项
			ret="中心确认结束@您有个项目：${dto.name},等待结束确认。";
			break;
		case 24://待分配
			ret="项目分配@您有个项目：${dto.name},等待分配中心审核人。";
			break;
		default:
			//TODO:抛出异常	

		}
		return ret;
	}
	
}